當談到Scala的模式比對時,常常會跟著提到case class
而case class又是什麼?它跟之前提到的類別有什麼不同嗎?
在Scala裡,對一個類別加上關鍵字case
,就是案例類別
案例類別有別於前面提到過的class,它有以下幾種作用:
apply
的工廠方法(這樣就不需要使用new
來建立物件)case class Dog(name: String, age: Int)
val d = Dog("Tom", 4) // 1. 工廠方法:Dog.apply("Tom", 4)
d.name // 2. Tom
d.age // 4
d.toString // 3. Dog("Tom", 4)
d == Dog("Tom", 4)
d.hashCode == Dog("Tom", 4).hashCode // 4. true
這些所有的便利性有一小部分的代價,就是類別會跟物件會變得比較大,因為有生成額外的方法而且每個建構參數都被添加隱性的屬性。